(レポート) MBL315: Etsy と iHS は AWS Device Farm の自動テストによってモバイルアプリの品質をどのように改善しているか #reinvent
AWS Device Farm の導入事例の紹介
この記事は、re:Invent 2015 のセッション「MBL315 - How Etsy and IHS Are Improving The Quality of Their Mobile Apps With Automated Testing on AWS Device Farm」のレポートです。
スピーカーは以下の方々です。
- Trent Peterson - Product Mgr, Amazon Web Services
- Shawn Castrianni - Principal Mobile Architect, IHS Global Inc.
- Nassim Kammah - Software Engineer, Etsy
Device Farm とは
Android, iOS 向けのアプリをクラウドでテストすることができるサービス。
- Scale : 100以上のユニークな実機、多くのインスタンスでスケール
- Security : フルHW、SWのisolation
- Flexixibility : ポピュラーなフレームワークのサポート
- Reports : テスト結果、スクショ、ログ、パフォーマンスが出力可能
- Integration : Jenkins, Android Studio, SDKs, CLI を組み合わせて利用
iHS事例
iHS の Shawn Castrianni 氏による、ので Device Farm を使用した、事例と採用している各種自動化ツール/サービスの紹介。
モバイルアプリのテストの自動化の必要性
以下の課題を解決するため、モバイルアプリのテストの「自動化」を採用しています。
- QAリソースの制限
- テストのリグレッション
- マニュアルテストのヒューマンエラー
- OSバージョンの変更によるクラッシュ
- 異なるモデル間でのクラッシュ (Androidは4.0以上で7,000機種ある)
開発/テストのプロセス
下図のフローでモバイルアプリの開発およびテストを行っています。
- アプリは Xamarin で開発
- Beta deployをマニュアルのテスターに配信
- Hockey App
- Android, iOS でベータ配信可能
- iOS は Development の Provisioning Profile が必要
- TestFlight Beta Distribution
- iOS のみ
- Distribution の Provisioning Profile で利用可能
- Automated UI Test (Simulators)
- Appium
- Ruby, Python, Java, JS, PHP, C# でテストが書ける
- Test runner は JUnit, NUnit
- iOS は UIAutomation, Android は UIAutomator
- 特別なビルドやinstrumentationは不要
- より良いプログラミングスキルは必要 JBehave
- Appium Inspector
- GUI でインタラクティブなテスティングツール
- テスト中のアプリが表示される
- UI の階層が見れる
- Automated UI Test (Device Farm)
- OSバージョン、デバイスの種類が豊富(100種類以上)
- テストを自動で生成する機能 (Fuzz testing)
- UI テストのサポート
- CI 連係を考慮した SDK の提供
- フラットな料金体系
- CI
- PMEase QuickBuild
- Javaベースのクロスプラットフォームのビルドサーバー
- アプリのビルドの自動化
まとめ
Xamarin や Appium などを採用することにより、マルチプラットフォーム向けのアプリを効率的に開発されているようです。Device Farm は Appium のテストコードも利用できますし、iOS と Android の両方をサポートしているので、非常に相性が良さそうです。
ビルドサーバーの PMEase QuickBuild は初めて知りました。とても便利そうですね。
Etsy事例
Nassim Kammah 氏による Etsy の事例紹介。
Etsy
- グッズのマーケットプレース
- 世界中の人からモバイルアプリでダイレクトにお買い物
- 安全な取引
モバイルアプリ
- 4つのアプリ
- 週単位のリリース
- 2つのリリースビルド、8 の QA スタッフ
開発フロー
- アプリは push をトリガーに、Web 開発チームへアプリを自動配信
- origin/master に push すると CI でテストとビルドを実行
- コードレビュー
- Pull Req を作る Script を作って自動化
- ビルドと配信
- bit.ly/trylib
- HEADでビルドを実行して配信
CI インフラ
- 10~20のジョブがパラレルで動作
- Build, Lint, Unit Test, Functional Test
- 8~10分のビルド
- iOS は 50 の Mac mini と MBP, Android は 26 の Linux コンテナ
ネイティブアプリのテスト
- 開発者からの Push キュー
- エンプロイはナイトリービルドをドッグフーディング
- ボランティアのエンプロイはAdminをローテーション
- QAチームはプレリリースアプリで審査
下図はテスト結果の様子です。
テスト
- Android は Espresso + Genymotion
- iOS は Simulator で KIF
- 1つのビルドジョブ
- Build Flow は Jenkins の Job で行う
Device Farm の活用
- Schedule テストで使用、Jenkins Pligin を通して
- GA (Google Analytics) でよく使われている OS、Device、Resolution を確認してテスト対象を選定
- 4アプリ * 10 デバイス * 30分ごと = めっちゃ結果出る
- Reality チェックは、機能テストが flaky か、デバイスで flaky か
Device Farmを使ったテスト結果の様子。
パフォーマンスのモニタリング
- デバイスログからのログのメトリクスを API 経由で取得
- ログをパースして graphite に送信
- パフォーマンスグラフを作成
まとめ
Pull Req の自動化など、最近の主流の開発ワークフローを出来る限り自動化しようとしているところに好感が持てました。また、ユニットテストが通ったとしてもバグが残ることはよくあるので、ボランティアのテスターにも継続的に配信し、意見をもらう体制が取れているところが品質を高めているポイントですね。
Device Farm もかなりヘビーに活用されているようでした。デバイスもすべて対象にするのではなく、GA の情報を元によりシェア率が高いデバイスを対象にしているところも良い選定基準だと思います。
Webinarが開催
2015年11月17日に Device Farm の Webinar が開催されます。興味のある方はぜひ!